package br.com.foxline.atlasmobile.entities;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;

import br.com.foxline.atlasmobile.enums.Caracterizacao;
import br.com.foxline.atlasmobile.enums.Cobertura;
import br.com.foxline.atlasmobile.enums.Comando;
import br.com.foxline.atlasmobile.enums.ComposicaoFamiliar;
import br.com.foxline.atlasmobile.enums.DominioTerra;
import br.com.foxline.atlasmobile.enums.EstadoConservacao;
import br.com.foxline.atlasmobile.enums.Estrutura;
import br.com.foxline.atlasmobile.enums.Fachada;
import br.com.foxline.atlasmobile.enums.Forro;
import br.com.foxline.atlasmobile.enums.InstSanitaria;
import br.com.foxline.atlasmobile.enums.InstalacoesEletricas;
import br.com.foxline.atlasmobile.enums.Ocupacao;
import br.com.foxline.atlasmobile.enums.Patrimonio;
import br.com.foxline.atlasmobile.enums.Pedologia;
import br.com.foxline.atlasmobile.enums.Piso;
import br.com.foxline.atlasmobile.enums.Posicao;
import br.com.foxline.atlasmobile.enums.RendaFamiliar;
import br.com.foxline.atlasmobile.enums.RevExterno;
import br.com.foxline.atlasmobile.enums.SituacaoImovel;
import br.com.foxline.atlasmobile.enums.SituacaoTerreno;
import br.com.foxline.atlasmobile.enums.TipoConstrucao;
import br.com.foxline.atlasmobile.enums.TipoDocumentoImovel;
import br.com.foxline.atlasmobile.enums.Topografia;
import br.com.foxline.atlasmobile.enums.UsoImovel;
import br.com.foxline.atlasmobile.enums.Utilizacao;
import br.com.foxline.atlasmobile.enums.Vinculo;

import com.j256.ormlite.dao.ForeignCollection;
import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.ForeignCollectionField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable
public class Imovel implements Serializable{

	@DatabaseField(columnName = "id", generatedId = true)
	private Long id;
	
	@DatabaseField
	private Date createAt;
	
	@DatabaseField
	private Date dateenviado;
	
	@DatabaseField(dataType = DataType.BOOLEAN_OBJ)
	private Boolean status;
	
	@DatabaseField(dataType = DataType.INTEGER_OBJ)
	private Integer inscricaoCadastralD;
	
	@DatabaseField(dataType = DataType.INTEGER_OBJ)
	private Integer inscricaoCadastralS;
	
	@DatabaseField(dataType = DataType.INTEGER_OBJ)
	private Integer inscricaoCadastralQuadra;
	
	@DatabaseField(dataType = DataType.INTEGER_OBJ)
	private Integer inscricaoCadastralLote;
	
	@DatabaseField(dataType = DataType.INTEGER_OBJ)
	private Integer inscricaoCadastralUnid;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private Comando comando;

	@DatabaseField(dataType = DataType.STRING)
	private String fatorLocalizacao;
	
	@DatabaseField(columnName = "enderecoImovel", foreignAutoRefresh = true, foreign = true)
	private Endereco enderecoImovel;
	
	@ForeignCollectionField(eager = true)
	private Collection<Proprietario> proprietarios;

	@DatabaseField(columnName = "enderecoCorrespondencia",foreignAutoRefresh = true, foreign = true)
	private Endereco enderecoCorrespondencia;
	
	@DatabaseField(dataType = DataType.BOOLEAN_OBJ)
	private Boolean insetoIptu;
	
	@DatabaseField(dataType = DataType.BOOLEAN_OBJ)
	private Boolean insetoTsu;

	@DatabaseField(dataType = DataType.BOOLEAN_OBJ)
	private Boolean calcamento;
	
	@DatabaseField(dataType = DataType.BOOLEAN_OBJ)
	private Boolean iluminacaoPublica;
	
	@DatabaseField(dataType = DataType.BOOLEAN_OBJ)
	private Boolean limpezaPublica;
	
	@DatabaseField(dataType = DataType.BOOLEAN_OBJ)
	private Boolean coletaLixo;
	
	@DatabaseField(columnName = "dimensoes", foreignAutoRefresh = true, foreign = true)
	private Dimensao dimensoes;
	
	@DatabaseField(dataType = DataType.DOUBLE_OBJ)
	private Double coordX;
	
	@DatabaseField(dataType = DataType.DOUBLE_OBJ)
	private Double coordY;
	
	@ForeignCollectionField(eager = false, columnName="annex_imovel")
    private Collection<Annex> annex;
	
	@DatabaseField(columnName = "croquiImovel",foreignAutoRefresh = true, foreign = true)
	private Annex croquiImovel;
	
	@DatabaseField(columnName = "croquiTerreno",foreignAutoRefresh = true, foreign = true)
	private Annex croquiTerreno;
	
	@DatabaseField(dataType = DataType.BOOLEAN_OBJ)
	private Boolean regImovel;
	
	@DatabaseField(dataType = DataType.BOOLEAN_OBJ)
	private Boolean minhaCasaMinhaVida;
	
	@DatabaseField(dataType = DataType.STRING)
	private String numeroReg;
	
	@DatabaseField(dataType = DataType.STRING)
	private String tempoMoradia;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private Cobertura cobertura;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private EstadoConservacao estadoConservacao;

	@DatabaseField(dataType = DataType.ENUM_STRING)
	private Estrutura estrutura;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private Fachada fachada;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private Forro forro;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private InstalacoesEletricas instalacoesEletricas;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private InstSanitaria instSanitaria;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private Ocupacao ocupacao;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private Patrimonio patrimonio;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private Pedologia pedologia;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private Piso piso;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private Posicao posicao;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private RevExterno revExterno;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private SituacaoTerreno situacaoTerreno;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private TipoConstrucao tipoConstrucao;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private Topografia topografia;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private UsoImovel usoImovel;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private Utilizacao utilizacao;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private Caracterizacao caracterizacao;

	@DatabaseField(dataType = DataType.ENUM_STRING)
	private DominioTerra dominioTerra;

	@DatabaseField(dataType = DataType.ENUM_STRING)
	private TipoDocumentoImovel tipoDocumentoImovel;
	
	//CONFRONTAÇOES
	
	@DatabaseField(dataType = DataType.STRING)
	private String frente;
	
	@DatabaseField(dataType = DataType.STRING)
	private String fundo;
	
	@DatabaseField(dataType = DataType.STRING)
	private String ladoEsquerdo;
	
	@DatabaseField(dataType = DataType.STRING)
	private String ladoDireito;
	
	@DatabaseField(dataType = DataType.BOOLEAN_OBJ)
	private Boolean pagaIptu;
	
	@DatabaseField(dataType = DataType.STRING)
	private String rip;
	
	@DatabaseField(dataType = DataType.BOOLEAN_OBJ)
	private Boolean ripNomeCadastrado;

	@DatabaseField(dataType = DataType.BOOLEAN_OBJ)
	private Boolean titularFalecido;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private Vinculo vinculoTitularRip;
	 
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private ComposicaoFamiliar composicaoFamiliar;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private RendaFamiliar rendaFamiliar;
	
	@DatabaseField(dataType = DataType.BOOLEAN_OBJ)
	private Boolean enviado;
	
	@DatabaseField(dataType = DataType.STRING)
	private String groupCreate;
	
	@DatabaseField(dataType = DataType.STRING)
	private String groupUpdate;
	
	@DatabaseField(dataType = DataType.STRING)
	private String obs;
	
	@DatabaseField(dataType = DataType.ENUM_STRING)
	private SituacaoImovel situacaoImovel;
	
	
	/*ADD NO ATLAS MOBILE*/
	@DatabaseField(dataType = DataType.BOOLEAN_OBJ)
	private Boolean bolsaFamilia;
	@DatabaseField(dataType = DataType.STRING)
	private String tempoMoradiaMunicipio;
	
	
	public String getTempoMoradiaMunicipio() {
		return tempoMoradiaMunicipio;
	}

	public void setTempoMoradiaMunicipio(String tempoMoradiaMunicipio) {
		this.tempoMoradiaMunicipio = tempoMoradiaMunicipio;
	}

	public Boolean getBolsaFamilia() {
		return bolsaFamilia;
	}

	public void setBolsaFamilia(Boolean bolsaFamilia) {
		this.bolsaFamilia = bolsaFamilia;
	}

	public SituacaoImovel getSituacaoImovel() {
		return situacaoImovel;
	}

	public void setSituacaoImovel(SituacaoImovel situacaoImovel) {
		this.situacaoImovel = situacaoImovel;
	}

	public String getObs() {
		return obs;
	}

	public void setObs(String obs) {
		this.obs = obs;
	}
	
	

	public Imovel(){
		this.enviado = false;
		this.status = true;
	}
	
	public Imovel(Long id, Integer inscricaoCadastralD,
			Integer inscricaoCadastralS, Integer inscricaoCadastralQuadra,
			Integer inscricaoCadastralLote, Integer inscricaoCadastralUnid,
			Endereco enderecoImovel, SituacaoImovel situacaoImovel) {
		super();
		this.id = id;
		this.inscricaoCadastralD = inscricaoCadastralD;
		this.inscricaoCadastralS = inscricaoCadastralS;
		this.inscricaoCadastralQuadra = inscricaoCadastralQuadra;
		this.inscricaoCadastralLote = inscricaoCadastralLote;
		this.inscricaoCadastralUnid = inscricaoCadastralUnid;
		this.enderecoImovel = enderecoImovel;
		this.situacaoImovel = situacaoImovel;
	}

	public Caracterizacao getCaracterizacao() {
		return caracterizacao;
	}

	
	public void setCaracterizacao(Caracterizacao caracterizacao) {
		this.caracterizacao = caracterizacao;
	}

	public Comando getComando() {
		return comando;
	}

	public void setComando(Comando comando) {
		this.comando = comando;
	}


	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Date getCreateAt() {
		return createAt;
	}

	public void setCreateAt(Date createAt) {
		this.createAt = createAt;
	}

	public Integer getInscricaoCadastralD() {
		return inscricaoCadastralD;
	}

	public void setInscricaoCadastralD(Integer inscricaoCadastralD) {
		this.inscricaoCadastralD = inscricaoCadastralD;
	}

	public Integer getInscricaoCadastralS() {
		return inscricaoCadastralS;
	}

	public void setInscricaoCadastralS(Integer inscricaoCadastralS) {
		this.inscricaoCadastralS = inscricaoCadastralS;
	}

	public Integer getInscricaoCadastralQuadra() {
		return inscricaoCadastralQuadra;
	}

	public void setInscricaoCadastralQuadra(Integer inscricaoCadastralQuadra) {
		this.inscricaoCadastralQuadra = inscricaoCadastralQuadra;
	}

	public Integer getInscricaoCadastralLote() {
		return inscricaoCadastralLote;
	}

	public void setInscricaoCadastralLote(Integer inscricaoCadastralLote) {
		this.inscricaoCadastralLote = inscricaoCadastralLote;
	}

	public Integer getInscricaoCadastralUnid() {
		return inscricaoCadastralUnid;
	}

	public void setInscricaoCadastralUnid(Integer inscricaoCadastralUnid) {
		this.inscricaoCadastralUnid = inscricaoCadastralUnid;
	}

	public String getFatorLocalizacao() {
		return fatorLocalizacao;
	}

	public void setFatorLocalizacao(String fatorLocalizacao) {
		this.fatorLocalizacao = fatorLocalizacao;
	}

	public Endereco getEnderecoImovel() {
		return enderecoImovel;
	}

	public void setEnderecoImovel(Endereco enderecoImovel) {
		this.enderecoImovel = enderecoImovel;
	}


	public Endereco getEnderecoCorrespondencia() {
		return enderecoCorrespondencia;
	}

	public void setEnderecoCorrespondencia(Endereco enderecoCorrespondencia) {
		this.enderecoCorrespondencia = enderecoCorrespondencia;
	}

	public Boolean getInsetoIptu() {
		return insetoIptu;
	}

	public void setInsetoIptu(Boolean insetoIptu) {
		this.insetoIptu = insetoIptu;
	}

	public Boolean getInsetoTsu() {
		return insetoTsu;
	}

	public void setInsetoTsu(Boolean insetoTsu) {
		this.insetoTsu = insetoTsu;
	}

	public Boolean getIluminacaoPublica() {
		return iluminacaoPublica;
	}

	public void setIluminacaoPublica(Boolean iluminacaoPublica) {
		this.iluminacaoPublica = iluminacaoPublica;
	}

	public Boolean getLimpezaPublica() {
		return limpezaPublica;
	}

	public void setLimpezaPublica(Boolean limpezaPublica) {
		this.limpezaPublica = limpezaPublica;
	}

	public Boolean getColetaLixo() {
		return coletaLixo;
	}

	public void setColetaLixo(Boolean coletaLixo) {
		this.coletaLixo = coletaLixo;
	}

	public Dimensao getDimensoes() {
		return dimensoes;
	}

	public void setDimensoes(Dimensao dimensoes) {
		this.dimensoes = dimensoes;
	}

	public Double getCoordX() {
		return coordX;
	}

	public void setCoordX(Double coordX) {
		this.coordX = coordX;
	}

	public Double getCoordY() {
		return coordY;
	}

	public void setCoordY(Double coordY) {
		this.coordY = coordY;
	}

	public Boolean getStatus() {
		return status;
	}

	public void setStatus(Boolean status) {
		this.status = status;
	}





	public Collection<Proprietario> getProprietarios() {
		return proprietarios;
	}

	public void setProprietarios(Collection<Proprietario> proprietarios) {
		this.proprietarios = proprietarios;
	}

	public Boolean getEnviado() {
		return enviado;
	}

	public void setEnviado(Boolean enviado) {
		this.enviado = enviado;
	}

	public void setProprietarios(ForeignCollection<Proprietario> proprietarios) {
		this.proprietarios = proprietarios;
	}

	public Cobertura getCobertura() {
		return cobertura;
	}

	public void setCobertura(Cobertura cobertura) {
		this.cobertura = cobertura;
	}

	public EstadoConservacao getEstadoConservacao() {
		return estadoConservacao;
	}

	public void setEstadoConservacao(EstadoConservacao estadoConservacao) {
		this.estadoConservacao = estadoConservacao;
	}

	public Estrutura getEstrutura() {
		return estrutura;
	}

	public void setEstrutura(Estrutura estrutura) {
		this.estrutura = estrutura;
	}

	public Fachada getFachada() {
		return fachada;
	}

	public void setFachada(Fachada fachada) {
		this.fachada = fachada;
	}

	public Forro getForro() {
		return forro;
	}

	public void setForro(Forro forro) {
		this.forro = forro;
	}

	public InstalacoesEletricas getInstalacoesEletricas() {
		return instalacoesEletricas;
	}

	public void setInstalacoesEletricas(InstalacoesEletricas instalacoesEletricas) {
		this.instalacoesEletricas = instalacoesEletricas;
	}

	public InstSanitaria getInstSanitaria() {
		return instSanitaria;
	}

	public void setInstSanitaria(InstSanitaria instSanitaria) {
		this.instSanitaria = instSanitaria;
	}

	public Ocupacao getOcupacao() {
		return ocupacao;
	}

	public void setOcupacao(Ocupacao ocupacao) {
		this.ocupacao = ocupacao;
	}

	public Patrimonio getPatrimonio() {
		return patrimonio;
	}

	public void setPatrimonio(Patrimonio patrimonio) {
		this.patrimonio = patrimonio;
	}

	public Pedologia getPedologia() {
		return pedologia;
	}

	public void setPedologia(Pedologia pedologia) {
		this.pedologia = pedologia;
	}

	public Piso getPiso() {
		return piso;
	}

	public void setPiso(Piso piso) {
		this.piso = piso;
	}

	public Posicao getPosicao() {
		return posicao;
	}

	public void setPosicao(Posicao posicao) {
		this.posicao = posicao;
	}

	public RevExterno getRevExterno() {
		return revExterno;
	}

	public void setRevExterno(RevExterno revExterno) {
		this.revExterno = revExterno;
	}

	public SituacaoTerreno getSituacaoTerreno() {
		return situacaoTerreno;
	}

	public void setSituacaoTerreno(SituacaoTerreno situacaoTerreno) {
		this.situacaoTerreno = situacaoTerreno;
	}

	public TipoConstrucao getTipoConstrucao() {
		return tipoConstrucao;
	}

	public void setTipoConstrucao(TipoConstrucao tipoConstrucao) {
		this.tipoConstrucao = tipoConstrucao;
	}

	public Topografia getTopografia() {
		return topografia;
	}

	public void setTopografia(Topografia topografia) {
		this.topografia = topografia;
	}

	public UsoImovel getUsoImovel() {
		return usoImovel;
	}

	public void setUsoImovel(UsoImovel usoImovel) {
		this.usoImovel = usoImovel;
	}

	public Utilizacao getUtilizacao() {
		return utilizacao;
	}

	public void setUtilizacao(Utilizacao utilizacao) {
		this.utilizacao = utilizacao;
	}

	public Boolean getCalcamento() {
		return calcamento;
	}

	public void setCalcamento(Boolean calcamento) {
		this.calcamento = calcamento;
	}



	public Collection<Annex> getAnnex() {
		return annex;
	}

	public void setAnnex(Collection<Annex> annex) {
		this.annex = annex;
	}

	@Override
	public String toString() {
		
		return " " +  (enderecoImovel == null ? "Endereço não informado." : enderecoImovel);
		
	}

	public Boolean getRegImovel() {
		return regImovel;
	}

	public void setRegImovel(Boolean regImovel) {
		this.regImovel = regImovel;
	}

	public String getNumeroReg() {
		return numeroReg;
	}

	public void setNumeroReg(String numeroReg) {
		this.numeroReg = numeroReg;
	}

	public String getTempoMoradia() {
		return tempoMoradia;
	}

	public void setTempoMoradia(String tempoMoradia) {
		this.tempoMoradia = tempoMoradia;
	}

	public Boolean getMinhaCasaMinhaVida() {
		return minhaCasaMinhaVida;
	}

	public void setMinhaCasaMinhaVida(Boolean minhaCasaMinhaVida) {
		this.minhaCasaMinhaVida = minhaCasaMinhaVida;
	}

	public String getFrente() {
		return frente;
	}

	public void setFrente(String frente) {
		this.frente = frente;
	}

	public String getFundo() {
		return fundo;
	}

	public void setFundo(String fundo) {
		this.fundo = fundo;
	}

	public String getLadoEsquerdo() {
		return ladoEsquerdo;
	}

	public void setLadoEsquerdo(String ladoEsquerdo) {
		this.ladoEsquerdo = ladoEsquerdo;
	}

	public String getLadoDireito() {
		return ladoDireito;
	}

	public void setLadoDireito(String ladoDireito) {
		this.ladoDireito = ladoDireito;
	}

	public Boolean getPagaIptu() {
		return pagaIptu;
	}

	public void setPagaIptu(Boolean pagaIptu) {
		this.pagaIptu = pagaIptu;
	}

	public DominioTerra getDominioTerra() {
		return dominioTerra;
	}

	public void setDominioTerra(DominioTerra dominioTerra) {
		this.dominioTerra = dominioTerra;
	}

	public TipoDocumentoImovel getTipoDocumentoImovel() {
		return tipoDocumentoImovel;
	}

	public void setTipoDocumentoImovel(TipoDocumentoImovel tipoDocumentoImovel) {
		this.tipoDocumentoImovel = tipoDocumentoImovel;
	}

	public String getRip() {
		return rip;
	}

	public void setRip(String rip) {
		this.rip = rip;
	}

	public Boolean getRipNomeCadastrado() {
		return ripNomeCadastrado;
	}

	public void setRipNomeCadastrado(Boolean ripNomeCadastrado) {
		this.ripNomeCadastrado = ripNomeCadastrado;
	}

	public Boolean getTitularFalecido() {
		return titularFalecido;
	}

	public void setTitularFalecido(Boolean titularFalecido) {
		this.titularFalecido = titularFalecido;
	}

	public Vinculo getVinculoTitularRip() {
		return vinculoTitularRip;
	}

	public void setVinculoTitularRip(Vinculo vinculoTitularRip) {
		this.vinculoTitularRip = vinculoTitularRip;
	}

	public ComposicaoFamiliar getComposicaoFamiliar() {
		return composicaoFamiliar;
	}

	public void setComposicaoFamiliar(ComposicaoFamiliar composicaoFamiliar) {
		this.composicaoFamiliar = composicaoFamiliar;
	}

	public RendaFamiliar getRendaFamiliar() {
		return rendaFamiliar;
	}

	public void setRendaFamiliar(RendaFamiliar rendaFamiliar) {
		this.rendaFamiliar = rendaFamiliar;
	}

	public Annex getCroquiImovel() {
		return croquiImovel;
	}

	public void setCroquiImovel(Annex croquiImovel) {
		this.croquiImovel = croquiImovel;
	}

	public Annex getCroquiTerreno() {
		return croquiTerreno;
	}

	public void setCroquiTerreno(Annex croquiTerreno) {
		this.croquiTerreno = croquiTerreno;
	}

	public String getGroupCreate() {
		return groupCreate;
	}

	public void setGroupCreate(String groupCreate) {
		this.groupCreate = groupCreate;
	}

	public String getGroupUpdate() {
		return groupUpdate;
	}

	public void setGroupUpdate(String groupUpdate) {
		this.groupUpdate = groupUpdate;
	}

	public Date getDateenviado() {
		return dateenviado;
	}

	public void setDateenviado(Date dateenviado) {
		this.dateenviado = dateenviado;
	}
	
	
}


